<?php

namespace App\Console\Commands;

use App\Models\ParkChannels;
use Illuminate\Console\Command;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Log;
use Overtrue\Http\Client;
use DB;

class OrderCarList extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'order:car';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = '预约抬杆';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     * 预约抬杆 计划任务
     * @author wangxb
     * @email  wangxiaobo@parkingwang.com
     *
     * @return mixed
     */
    public function handle()
    {
//        Log::info('[定时任务]<预约车队>：开始');
//        $this->info(date('Y-m-d H:i:s') . ' [定时任务]<预约车队>: 执行开始');
        $res = collect(ParkChannels::whereNotNull("order_start")->get());
        $res->map(function($item){
            $url = config('remoteControl.park_order_lift');
            $client = Client::create();

            $armCode = $item->arm_code;
            $parkCode = $item->park_code;
            // 出入口
            if($item->type == 139) {
                $out_side_type = 1;
                $gateWay=2;         //  2:入口
            } else if($item->type == 140) {
                $out_side_type = 2;
                $gateWay=1;         //  1:出口
            }
            // gateway 出入口 1:出口 2:入口
            if (empty($armCode) || empty($parkCode) || empty($gateWay)) {
                $this->info(date('Y-m-d H:i:s') . ' [定时任务]<预约车队>: 参数错误:'.json_encode($item));
                return ;
            }
            if(empty($item->order_start)) return;

            // 抬杆
            $start_time = strtotime($item->order_start);
            echo $start_time-time();
            if( ($start_time-time())>0 &&($start_time-time())<=60 && empty($item->flag)){
                $requestData = [
                    'group_name' => "one",
                    'arm_code' => $armCode,
                    'park_code' => $parkCode,
                    'protocol' => '{"ocflag":1,"channel":'.$out_side_type.'}'
                ];
                Log::info("传递参数".json_encode($requestData));
                try {
                    $response = $client->post($url, $requestData);
                    Log::info("抬杆".toJson($response));
                    if($response['code']==0) {
                        DB::table('park_channels')
                            ->where('id', $item->id)
                            ->update(['flag' => 1]);
                        Log::info('[定时任务]<开始抬杆>：开始' . ($start_time - time()) . '----' . $parkCode . '------' . $armCode . '------' . $item->order_start);
                    }
                } catch (ClientException $e) {
                    throw $e;
                }
            }
            // 落杆
//            $end_time = strtotime($item->order_end);
//            if((time()-$end_time)>=30 && $item->flag==1){
//                $requestData = [
//                    'arm_code' => $armCode,
//                    'park_code' => $parkCode,
//                    'protocol' => '{"ocflag":0,"channel":'.$out_side_type.'}'
//                ];
//                Log::info("传递参数".json_encode($requestData));
//                try {
//                    $response = $client->post($url, $requestData);
//                    Log::info("落杆".toJson($response));
//                    if($response['code']==0) {
//                        DB::table('park_channels')
//                            ->where('id', $item->id)
//                            ->update(['flag' => 0]);
//                        $r = DB::update("update park_channels set flag=0,order_start=NULL,order_end=NULL where id='$item->id'");
//                        Log::info('[定时任务]<结束抬杆>：结束'.$parkCode.'------'.$armCode.'------'.$item->order_end);
//                    }
//                } catch (ClientException $e) {
//                    throw $e;
//                }
//            }

        });

        $this->info(date('Y-m-d H:i:s') . ' [定时任务]<车队模式>: 执行结束: ');
    }
}
